#include <stdio.h>
#include <stdlib.h> // 用于使用sizeof操作符

int main()
{
    // 定义浮点数变量
    float f = 3.1415926f;         // 使用f后缀表示这是一个float类型的常量
    double d = 2.718281828459045; // 默认是double类型
    double num1 = 1e-3;           // 科学计数法表示0.001

    // 输出浮点数占用的字节数
    printf("Size of float: %zu bytes\n", sizeof(float));
    printf("Size of double: %zu bytes\n", sizeof(double));

    // 普通格式输出
    printf("float f = %f\n", f);  // 默认显示6位小数
    printf("double d = %f\n", d); // 默认显示6位小数

    // 指定小数点后位数输出
    printf("float f with 2 decimal places = %.2f\n", f);
    printf("double d with 10 decimal places = %.10f\n", d);

    // 科学计数法输出
    printf("float f in scientific notation = %e\n", f);  // 默认显示6位小数
    printf("double d in scientific notation = %e\n", d); // 默认显示6位小数

    // 指定小数点后位数的科学计数法输出
    printf("float f in scientific notation with 2 decimal places = %.2e\n", f);
    printf("double d in scientific notation with 10 decimal places = %.10e\n", d);

    // 默认情况下，不加后缀的浮点数常量是double类型
    double defaultDouble = 3.1415926; // 默认是double类型
    printf("Default double (without suffix) = %f\n", defaultDouble);

    // 于存在精度限制，浮点数只是一个近似值，它的计算是不精确的，比如 C 语言里面0.1 + 0.2并不等于0.3，而是有一个很小的误差
    if (0.1f == 0.2f + 0.1f)
    {
        printf("f + 0.1f is equal to 0.2f + 0.1f + f\n");
    }
    else
    {
        printf("f + 0.1f is NOT equal to 0.2f + 0.1f + f\n");
    }
}